import numpy as np
import matplotlib.pyplot as plt

# 生成符合高斯分布的点
def generate_gaussian_points(k, b, mean, stddev, x1, x2, n):
    x = np.linspace(x1, x2, n)  # 生成 x 范围内均匀分布的 n 个点
    y =  k * x  + b + np.random.normal(mean, stddev, n)  # 生成符合高斯分布的 n 个随机数
    return x, y

# 定义线性函数 f(x) = kx + b
def f(x, k, b):
    return k * x + b

# 参数设置
mean = 0  # 高斯分布的均值
stddev = 0.1  # 高斯分布的标准差
x1 = 0  # x 范围的起始值
x2 = 10  # x 范围的结束值
n = 100  # 生成的点的数量
k = 2  # 线性函数的斜率
b = 1  # 线性函数的截距

# 生成高斯分布的点
x, y = generate_gaussian_points(k, b, mean, stddev, x1, x2, n)

# 绘制散点图
plt.scatter(x, y, label='Generated Points')

# 计算线性函数的预测值
y_pred = f(x, k, b)

# 绘制线性函数的图像
plt.plot(x, y_pred, color='red', label=f'Linear Fit: y = {k}x + {b}')

# 设置图例和标题
plt.legend()
plt.title('Gaussian Distributed Points and Linear Fit')
plt.xlabel('X')
plt.ylabel('Y')

print(f"double x_data[] = {np.array2string(x, separator=', ')};")
print(f"double y_data[] = {np.array2string(y, separator=', ')};")

# 显示图像
plt.grid(True)
plt.show()
